///*
// * To change this template, choose Tools | Templates
// * and open the template in the editor.
// */
//package cz.muni.fi.rum.reflector.telnet.core;
//
//import cz.muni.fi.rum.reflector.ReflectorFactory;
//import cz.muni.fi.rum.reflector.ReflectorFactoryImpl;
//import cz.muni.fi.rum.reflector.domainmodel.Reflector;
//import cz.muni.fi.rum.reflector.domainmodel.ReflectorException;
//import cz.muni.fi.rum.reflector.domainmodel.ReflectorListener;
//import cz.muni.fi.rum.reflector.domainmodel.ReflectorListener.ConnectionType;
//import cz.muni.fi.rum.reflector.domainmodel.ReflectorSession;
//import cz.muni.fi.rum.reflector.telnet.domainmodel.RapResponse;
//import java.util.LinkedList;
//import java.util.List;
//import java.util.ListIterator;
//import java.util.logging.Level;
//import java.util.logging.Logger;
//
///**
// *
// * @author pmikulasek
// */
//public class ResponseParser {
//
//    private static ResponseParser instance;
//
//    private ResponseParser() {
//    }
//
//    public static ResponseParser getInstance() {
//        if (instance == null) {
//            instance = new ResponseParser();
//        }
//        return instance;
//    }
//
//    public boolean isSuccesMessage(RapResponse response) {
//        String[] lines = response.toString().split("\n");
//        if (lines.length < 2) {
//            return false;
//        }
//        String[] check = lines[1].split(" ");
//        if (check.length != 3) {
//            return false;
//        }
//        if (check[0].equals(Core.PROTOCOL_VERSION)
//                && check[1].equals(Core.RESPONSE_SUCCES_NUMBER)
//                && check[2].equals(Core.RESPONSE_SUCCES_TEXT)) {
//            return true;
//        } else {
//            return false;
//        }
//    }
//
//    public void parseStatSessionResponseAndSynchronizeConnectedReflector(RapResponse response) throws ResponseFormatException {
//        if (isSuccesMessage(response)) {
//            //rozbiti na radky
//            String[] lines = response.toString().split("\n");
//
//            List<String> listeners;
//            List<List<String>> sessions = new LinkedList<List<String>>();
//            //vyrezani radku ktere obsahuji onformace o session
//            for (int i = 7; !lines[i].equals(""); i++) {
//                //vyrezani listeneru z toho je pole ktere ma nasledujici tvar
//                //{other,"/udp-0.0.0.0:8000", "/udp-0.0.0.0:80001"}
//                String[] session = lines[i].split("listener");
//                listeners = new LinkedList<String>();
//                //vyziskani techto stringu nesouci info o listenerech v jedne session
//                for (int s = session.length - 1; session[s].startsWith("/"); s--) {
//                    listeners.add(session[s].substring(1));
//                }
//                sessions.add(listeners);
//            }
//
//            //TODO logovani info
//            ReflectorFactory factory = ReflectorFactoryImpl.getInstance();
//            Reflector reflector = factory.getOrCreateReflector();
//            factory.reset();
//
//            for (List<String> l : sessions) {
//                List<ReflectorListener> sesListListeners = new LinkedList<ReflectorListener>();
//
//                for (String oneListenerString : l) {
//                    ConnectionType type = null;
//                    String address = null;
//                    Integer port = null;
//                    //pole tvaru {"udp","0.0.0.0:8000"}
//                    String[] typeAndOther = oneListenerString.split("-");
//                    if (typeAndOther.length == 2) {
//                        try {
//                            type = ConnectionType.valueOf(typeAndOther[0]);
//                        } catch (IllegalArgumentException ex) {
//                            throw new ResponseFormatException(oneListenerString);
//                        }
//                        //rozbiti na dva celky {"0.0.0.0", "8000"}
//                        String[] addressAndPort = typeAndOther[1].split(":");
//                        if (addressAndPort.length == 2) {
//                            //address
//                            address = addressAndPort[0];
//                            try {
//                                //port
//                                port = Integer.valueOf(addressAndPort[1].trim());
//                            } catch (NumberFormatException ex) {
//                                throw new ResponseFormatException("\"" + addressAndPort[1] + "\"");
//                            }
//                        } else {
//                            throw new ResponseFormatException(oneListenerString);
//                        }
//                    } else {
//                        throw new ResponseFormatException(oneListenerString);
//                    }
//                    try {
//                        //TODO vytvareni listeneru data-size is allways null
//                        //and other listener parametres is null well.
//                        sesListListeners.add(factory.createRerflectorListener(type, port, null, address, null, null, address));
//                    } catch (ReflectorException ex) {
//                        //TODO logovani tohle by opravdu nemelo nastat takze warning or error
//                        Logger.getLogger(ResponseParser.class.getName()).log(Level.SEVERE, null, ex);
//                    }
//                }
//                ListIterator<ReflectorListener> listIterator = sesListListeners.listIterator();
//                ReflectorSession reflectorSession;
//                if (listIterator.hasNext()) {
//                    reflectorSession = reflector.getReflectorSessionByListener(listIterator.next());
//                } else {
//                    throw new ResponseFormatException(l.toString());
//                }
//                while (listIterator.hasNext()) {
//                    reflector.conflateReflectorSessions(listIterator.next(), reflectorSession);
//                }
//            }
////            System.out.println("konexc");
//        }
//    }
//}
